﻿//=============================================================================
//
// 背景 [background.cpp]
//
//=============================================================================
#include "background.h"

//*****************************************************************************
// マクロ定義
//*****************************************************************************
#define	TEXTURE_BG			"data/TEXTURE/BG/BG.png"		// 読み込むテクスチャファイル名

//*****************************************************************************
// プロトタイプ宣言
//*****************************************************************************
HRESULT MakeVertexBG(LPDIRECT3DDEVICE9 pDevice);

void SetVertexBG(	float scaleX,					//X轴的放大参数
					float scaleY,					//Y轴的放大参数
					float sizeX,					//自身X轴的大小参数
					float sizeY );					//自身Y轴的大小参数

void SetTextureBG(	int nPatternAnim,				//记录当前显示帧
					int numAnimPattern, 			//记录当前对应的组成图组的图片数量
					int texPatternDivideX,			//记录当前图组X轴图片数量
					int texPatternDivideY );		//记录当前图组Y轴图片数量




//*****************************************************************************
// グローバル変数
//*****************************************************************************
LPDIRECT3DTEXTURE9		g_pD3DTextureBG = NULL;		// テクスチャへのポインタ
LPDIRECT3DVERTEXBUFFER9 g_pD3DVtxBuffBG = NULL;		// 頂点バッファインターフェースへのポインタ


BACKGROUND g_background;

//=============================================================================
// 初期化処理
//=============================================================================
HRESULT InitBG(LPDIRECT3DDEVICE9 pDevice)
{
	g_background.pos = D3DXVECTOR3(BG_POS_X, BG_POS_Y, 0.0f);


	// 頂点情報の作成
	MakeVertexBG(pDevice);

	// テクスチャの読み込み
	D3DXCreateTextureFromFile(pDevice,					// デバイスへのポインタ
								TEXTURE_BG,				// ファイルの名前
								&g_pD3DTextureBG);		// 読み込むメモリー

	return S_OK;
}

//=============================================================================
// 終了処理
//=============================================================================
void UninitBG(void)
{
	if(g_pD3DTextureBG != NULL)
	{// テクスチャの開放
		g_pD3DTextureBG->Release();
		g_pD3DTextureBG = NULL;
	}

	if(g_pD3DVtxBuffBG != NULL)
	{// 頂点バッファの開放
		g_pD3DVtxBuffBG->Release();
		g_pD3DVtxBuffBG = NULL;
	}
}

//=============================================================================
// 更新処理
//=============================================================================
void UpdateBG(void)
{
	//g_background.pos = D3DXVECTOR3(1500.0f, 500.0f, 0.0f);
	SetVertexBG(1600,						//地图放大3倍显示，在原有的基础上加上2倍
				1200,						//地图放大3倍显示，在原有的基础上加上2倍
				SCREEN_WIDTH, 
				SCREEN_HEIGHT);



}

//=============================================================================
// 描画処理
//=============================================================================
void DrawBG(LPDIRECT3DDEVICE9 pDevice)
{
	// 頂点バッファをデバイスのデータストリームにバインド
	pDevice->SetStreamSource(0, g_pD3DVtxBuffBG, 0, sizeof(VERTEX_2D));

	// 頂点フォーマットの設定
	pDevice->SetFVF(FVF_VERTEX_2D);

	// テクスチャの設定
	 pDevice->SetTexture(0, g_pD3DTextureBG);

	// ポリゴンの描画
	pDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, NUM_POLYGON);
}

//=============================================================================
// 頂点の作成
//=============================================================================
HRESULT MakeVertexBG(LPDIRECT3DDEVICE9 pDevice)
{
	// オブジェクトの頂点バッファを生成
	if( FAILED( pDevice->CreateVertexBuffer(sizeof(VERTEX_2D) * NUM_VERTEX,		// 頂点データ用に確保するバッファサイズ(バイト単位)
												D3DUSAGE_WRITEONLY,				// 頂点バッファの使用法　
												FVF_VERTEX_2D,					// 使用する頂点フォーマット
												D3DPOOL_MANAGED,				// リソースのバッファを保持するメモリクラスを指定
												&g_pD3DVtxBuffBG,				// 頂点バッファインターフェースへのポインタ
												NULL)))							// NULLに設定
	{
		return E_FAIL;
	}

	{//頂点バッファの中身を埋める
		VERTEX_2D *pVtx;

		// 頂点データの範囲をロックし、頂点バッファへのポインタを取得
		g_pD3DVtxBuffBG->Lock(0, 0, (void**)&pVtx, 0);

		//// 頂点座標の設定
		//pVtx[0].vtx = D3DXVECTOR3(BG_POS_X, BG_POS_Y, 0.0f);
		//pVtx[1].vtx = D3DXVECTOR3(BG_POS_X + BG_SIZE_X, BG_POS_Y, 0.0f);
		//pVtx[2].vtx = D3DXVECTOR3(BG_POS_X, BG_POS_Y + BG_SIZE_Y, 0.0f);
		//pVtx[3].vtx = D3DXVECTOR3(BG_POS_X + BG_SIZE_X, BG_POS_Y + BG_SIZE_Y, 0.0f);

		// rhwの設定
		pVtx[0].rhw =
		pVtx[1].rhw =
		pVtx[2].rhw =
		pVtx[3].rhw = 1.0f;

		// 反射光の設定
		pVtx[0].diffuse = D3DCOLOR_RGBA(255, 255, 255, 255);
		pVtx[1].diffuse = D3DCOLOR_RGBA(255, 255, 255, 255);
		pVtx[2].diffuse = D3DCOLOR_RGBA(255, 255, 255, 255);
		pVtx[3].diffuse = D3DCOLOR_RGBA(255, 255, 255, 255);

		// テクスチャ座標の設定
		pVtx[0].tex = D3DXVECTOR2(0.0f, 0.0f);
		pVtx[1].tex = D3DXVECTOR2(1.0f, 0.0f);
		pVtx[2].tex = D3DXVECTOR2(0.0f, 1.0f);
		pVtx[3].tex = D3DXVECTOR2(1.0f, 1.0f);

		// 頂点データをアンロックする
		g_pD3DVtxBuffBG->Unlock();
	}

	return S_OK;
}



void SetVertexBG(	float scaleX,				//X轴的放大参数
					float scaleY,				//Y轴的放大参数
					float sizeX,				//自身X轴的大小参数
					float sizeY )				//自身Y轴的大小参数
{
	VERTEX_2D *pVtx;

	// 頂点データの範囲をロックし、頂点バッファへのポインタを取得
	g_pD3DVtxBuffBG->Lock(0, 0, (void**)&pVtx, 0);

	//pVtx += (nIdx * 4);

	// 頂点座標の設定
	pVtx[0].vtx = D3DXVECTOR3(g_background.pos.x - sizeX / 2, g_background.pos.y - sizeY / 2, 0.0f);
	pVtx[1].vtx = D3DXVECTOR3(g_background.pos.x + scaleX + sizeX / 2, g_background.pos.y - sizeY / 2, 0.0f);
	pVtx[2].vtx = D3DXVECTOR3(g_background.pos.x - sizeX / 2, g_background.pos.y + scaleY + sizeY / 2, 0.0f);
	pVtx[3].vtx = D3DXVECTOR3(g_background.pos.x + scaleX + sizeX / 2, g_background.pos.y + scaleY + sizeY / 2, 0.0f);


	// 頂点データをアンロックする
	g_pD3DVtxBuffBG->Unlock();
}




void SetTextureBG( int nPatternAnim,				//记录当前显示帧
							int numAnimPattern, 			//记录当前对应的组成图组的图片数量
							int texPatternDivideX,			//记录当前图组X轴图片数量
							int texPatternDivideY )			//记录当前图组Y轴图片数量
{
	{//頂点バッファの中身を埋める
		VERTEX_2D *pVtx;
		float fPosXLeft, fPosXRight;
		float fPosYUp, fPosYDown;

		// 頂点データの範囲をロックし、頂点バッファへのポインタを取得
		g_pD3DVtxBuffBG->Lock(0, 0, (void**)&pVtx, 0);

		//pVtx += (nIdx * 4);

		// テクスチャ座標の設定 纹理坐标设定
		fPosXLeft = (float)(nPatternAnim % texPatternDivideX) * 1.0f / texPatternDivideX;
		fPosXRight = (float)(nPatternAnim % texPatternDivideX) * 1.0f / texPatternDivideX + 1.0f / texPatternDivideX;
		fPosYUp = (float)(nPatternAnim / (numAnimPattern / texPatternDivideY)) * 1.0f / texPatternDivideY;
		fPosYDown = (float)(nPatternAnim / (numAnimPattern / texPatternDivideY)) * 1.0f / texPatternDivideY + 1.0f / texPatternDivideY;

		pVtx[0].tex = D3DXVECTOR2(fPosXLeft, fPosYUp);
		pVtx[1].tex = D3DXVECTOR2(fPosXRight, fPosYUp);
		pVtx[2].tex = D3DXVECTOR2(fPosXLeft, fPosYDown);
		pVtx[3].tex = D3DXVECTOR2(fPosXRight, fPosYDown);

		// 頂点データをアンロックする
		g_pD3DVtxBuffBG->Unlock();
	}
}


BACKGROUND *GetBGPos( void )
{
	return &g_background;
}